import Path from 'path'
import Vue from 'vue'
import VueI18n from 'vue-i18n'

Vue.use(VueI18n)

const locale = localStorage.getItem('LANGUAGE_KEY') || 'en'

/**
 * 格式化文件名 ./en/file/name.json 》》》 ./en/file-name.json
 * @param {String} str 需要格式化的字符串
 */
const fileNameInfoFormat = (str) => {
  const index = 2
  const target = '/'
  const to = '-'
  return str.replace(new RegExp(`((?:${target}(?:\\s|\\S)*?){${index}})${target}`), `$1${to}`)
}

// 获取语言包目录
const keys = require.context('./', true, /\.json/).keys()
const tempArray = []
keys.forEach((key) => {
  tempArray.push(key.split('/')[1])
})
const catalogue = Array.from(new Set(tempArray))

// 引入语言包
const messages = {}
const langFiles = require.context('./', true, /\.json/)
catalogue.forEach((key) => {
  // 目录中的语言包
  const langObj = {}
  langFiles.keys().forEach((langKey) => {
    const nameStr = fileNameInfoFormat(langKey)
    const name = Path.basename(nameStr, '.json')
    if (langKey.startsWith(`./${key}/`)) {
      langObj[name] = langFiles(langKey).default || langFiles(langKey)
    }
  })
  // element 语言包
  const langElement = require(`element-ui/lib/locale/lang/${key}`)
  messages[key] = {
    ...langObj,
    ...langElement ? langElement.default : {}
  }
})

const i18n = new VueI18n({
  locale,
  messages,
  silentTranslationWarn: true
})

export default i18n

/* 语言表
中国              汉语                     zh          CN
中国香港                                   zh          HK
中国澳门                                   zh          MO
中国台湾                                   zh          TW
新加坡            汉语                     zh          SG
中国简体中文      zh-CHS
中国繁体中文      zh-CHT
英国              英语                     en          GB
美国              英语                     en          US
俄罗斯            俄罗斯Tatar语             tt          RU
俄罗斯            俄罗斯语                  ru          RU
德国              德语                     de          DE
瑞士              德语                     de          CH
卢森堡            德语                     de          LU
奥地利            德语                     de          AT
列支敦士登         德语                     de          LI
加拿大            法语                     fr          CA
法国              法语                     fr          FR
卢森堡            法语                     fr          LU
比利时            法语                     fr          BE
摩纳哥            法语                     fr          MC
瑞士              法语                     fr          CH
意大利            意大利                   it          IT
日本              日语                     ja          JP
韩国              韩国                     ko          KR
哈萨克            哈萨克(Kazakh)           kk          KZ
芬兰              芬兰语                   fi          FI
瑞典              芬兰语                   sv          FI
瑞典              瑞典语                   sv          SE
匈牙利            匈牙利                   hu          HU
冰岛              冰岛                     is          IS
印尼              印尼                     id          ID
瑞士              意大利                   it          CH
土耳其            土耳其语                 tr          TR
乌克兰            乌克兰语                 uk          UA
巴基斯坦          巴基斯坦Urdu语           ur          PK
加拿大            英语                     en          CA
爱尔兰            英语                     en          IE
捷克              捷克                     cs          CZ
瑞士              法语                     fr          CH
加勒比海          英语                     en          CB
澳洲              英语                     en          AU
新西兰            英语                     en          NZ
比利时            法语                     fr          BE
菲律宾            英语                     en          PH
牙买加            英语                     en          JM
伯利兹            英语                     en          BZ
千里达托贝哥共和国 英语                     en          TT
津巴布韦          英语                     en          ZW
爱沙尼亚          爱沙尼亚                 et          EE
法罗群岛          法罗语(Faroese)          fo          FO
摩纳哥            法语                     fr          MC
西班牙            西班牙语                 es          ES
阿根廷            西班牙语                 es          AR
墨西哥            西班牙语                 es          MX
玻利维亚          西班牙语                 es          BO
智利              西班牙语                 es          CL
巴拿马            西班牙语                 es          PA
委内瑞拉          西班牙语                 es          VE
哥伦比亚          西班牙语                 es          CO
秘鲁              西班牙语                 es          PE
哥斯达黎加        西班牙语                 es          CR
多米尼加共和国    西班牙语                 es          DO
厄瓜多尔          西班牙语                 es          EC
萨尔瓦多          西班牙语                 es          SV
危地马拉          西班牙语                 es          GT
洪都拉斯          西班牙语                 es          HN
尼加拉瓜          西班牙语                 es          NI
巴拉圭            西班牙语                 es          PY
波多黎各          西班牙语                 es          PR
乌拉圭            西班牙语                 es          UY
印度              坦米尔语                 ta          IN
印度              印度语(Gujarati)         gu          IN
印度              北印度语                 hi          IN
印度              卡纳达语                 kn          IN
印度              Konkani                  kok         IN
印度              马拉地语                 mr          IN
印度              Punjab语                 pa          IN
印度              梵文                     sa          IN
印度              印度Telugu语             te          IN
挪威              挪威                     nb          NO
挪威              挪威(Nynorsk)            nn          NO
波兰              波兰                     pl          PL
巴西              葡萄牙语                 pt          BR
葡萄牙            葡萄牙语                 pt          PT
越南              越南语                   vi          VN
泰国              泰语                     th          TH
南非              英语                     en          ZA
南非              公用荷兰语               af          ZA
白俄罗斯          白俄罗斯语(Belarusian)   be          BY
伊朗王国          波斯语                   fa          IR
以色列            希伯来文                 he          IL
丹麦              丹麦                     da          DK
马尔代夫          马尔代夫(Dhivehi)        div         MV
比利时            荷兰语                   nl          BE
荷兰              荷兰语                   nl          NL
希腊              希腊                     el          GR
沙特阿拉伯        阿拉伯语                 ar          SA
埃及              阿拉伯语                 ar          EG
伊拉克            阿拉伯语                 ar          IQ
约旦              阿拉伯语                 ar          JO
科威特            阿拉伯语                 ar          KW
黎巴嫩            阿拉伯语                 ar          LB
利比亚            阿拉伯语                 ar          LY
卡塔尔            阿拉伯语                 ar          QA
叙利亚共和国      阿拉伯语                 ar          SY
叙利亚共和国      叙利亚语(Syriac)         syr         SY
保加利亚          保加利亚                 bg          BG
阿尔巴尼亚        阿尔巴尼亚               sq          AL
阿尔及利亚        阿拉伯语                 ar          DZ
巴林              阿拉伯语                 ar          BH
摩洛哥            阿拉伯语                 ar          MA
阿曼              阿拉伯语                 ar          OM
北非的共和国      阿拉伯语                 ar          TN
阿拉伯联合酋长国  阿拉伯语                 ar          AE
也门              阿拉伯语                 ar          YE
亚美尼亚          亚美尼亚语               hy          AM
巴斯克            巴斯克                   eu          ES
嘉泰罗尼亚        嘉泰罗尼亚               ca          ES
肯尼亚            肯尼亚(Swahili)语        sw          KE
克罗埃西亚        克罗埃西亚               hr          HR
加利西亚          加利西亚                 gl          ES
格鲁吉亚州        格鲁吉亚州               ka          GE
哈萨克            Kyrgyz                   ky          KZ
拉脱维亚          拉脱维亚                 lv          LV
立陶宛            立陶宛                   lt          LT
马其顿            马其顿                   mk          MK
汶莱              马来语                   ms          BN
马来西亚          马来西亚语               ms          MY
蒙古              蒙古                     mn          MN
罗马尼亚          罗马尼亚语               ro          RO
塞尔维亚(西里尔字母的)sr-SP-Cyrl
塞尔(拉丁文)   sr-SP-Latn
斯洛伐克          斯洛伐克                 sk          SK
斯洛文尼亚        斯洛文尼亚               sl          SI
乌兹别克          乌兹别克(西里尔字母的)   uz          uz-UZ-Cyrl
乌兹别克          乌兹别克(拉丁文的)       uz          UZ-Latn
塞浦路斯          希腊文                   el          CY
英语(全球)  en-WW
*/

/* Element 内置语言表
简体中文（zh-CN）
英语（en）
德语（de）
葡萄牙语（pt）
西班牙语（es）
丹麦语（da）
法语（fr）
挪威语（nb-NO）
繁体中文（zh-TW）
意大利语（it）
韩语（ko）
日语（ja）
荷兰语（nl）
越南语（vi）
俄语（ru-RU）
土耳其语（tr-TR）
巴西葡萄牙语（pt-br）
波斯语（fa）
泰语（th）
印尼语（id）
保加利亚语（bg）
波兰语（pl）
芬兰语（fi）
瑞典语（sv-SE）
希腊语（el）
斯洛伐克语（sk）
加泰罗尼亚语（ca）
捷克语（cs-CZ）
乌克兰语（ua）
土库曼语（tk）
泰米尔语（ta）
拉脱维亚语（lv）
南非荷兰语（af-ZA）
爱沙尼亚语（ee）
斯洛文尼亚语（sl）
阿拉伯语（ar）
希伯来语（he）
立陶宛语（lt）
蒙古语（mn）
哈萨克斯坦语（kz）
匈牙利语（hu）
罗马尼亚语（ro）
库尔德语（ku）
维吾尔语（ug-CN）
高棉语（km）
塞尔维亚语（sr）
巴斯克语（eu）
吉尔吉斯语（kg）
亚美尼亚语 (hy)
克罗地亚 (hr) */
